﻿#ifndef PROTREEWIDGET_H
#define PROTREEWIDGET_H

#include <QTreeWidget>
#include <QAction>
#include <QProgressDialog>
#include <protreethread.h>
#include "opentreethread.h"
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimedia/QMediaPlayList>


//前向声明，防止互引用
class SlideShowDialog;
class ProTreeWidget : public QTreeWidget
{
    Q_OBJECT
public:
    ProTreeWidget(QWidget *parent = nullptr);
    //添加文件到目录树中
    void AddProToTree(const QString& name,const QString& path);
private:
    //缓存目录树中的项目名
    QSet<QString> _set_path;
    //缓存右键点击的item项
    QTreeWidgetItem * _right_btn_item;
    //保存当前启动项目
    QTreeWidgetItem * _active_item;
    QTreeWidgetItem * _selected_item;
    QAction * _action_import;
    QAction * _action_setstart;
    QAction * _action_closepro;
    QAction * _action_slideshow;
    //导入文件时的进度对话框
    QProgressDialog * _dialog_progress;
    //打开文件时的进度对话框
    QProgressDialog * _open_progressdlg;
    std::shared_ptr<ProTreeThread> _thread_create_pro;
    std::shared_ptr<OpenTreeThread> _thread_open_pro;
    std::shared_ptr<SlideShowDialog> _slide_show_dlg;
    //_player为QMediaPlayer类型，_playlist为QMediaPlaylist类型，我们需要在pro里添加multimedia才能使用。
    //播放音乐
    QMediaPlayer * _player;
    //播放音乐列表
    QMediaPlaylist * _playlist;
private slots:
    //右键点击的槽函数弹出菜单
    void SlotItemPressed(QTreeWidgetItem *pressedItem,int column);
    //导入活动
    void SlotImport();
    //设置活动项目
    void SlotSetActive();
    //关闭项目
    void SlotClosePro();
    //轮播播放
    void SlotUpdateProgress(int count);
    void SlotFinishProgress();
    void SlotCancelProgress();

    void SlotUpOpenProgress(int count);
    void SlotFinishOpenProgress();
    void SlotCancelOpenProgress();
    void SlotDoubleClickItem(QTreeWidgetItem *doubleItem, int column);

    void SlotSlidShow();

public slots:
    //打开一个文件添加到目录树中
    void SlotOPenPro(const QString& path);
    void SlotNextShow();
    void SlotPreShow();
    //设置音乐槽函数
    void SlotSetMusic();
    void SlotStartMusic();
    void SlotStopMusic();


signals:
    void SigCancelProgress();
    void SigCancelOpenProgress();
    //发送信号通知右侧区域刷新显示照片
    void SigUpdateSelected(const QString& path);
    //发送更新图片信号
    void SigUpdatePic(const QString& path);
    void SigClearSelected();
};

#endif // PROTREEWIDGET_H
